/**
 * 实体集类demo案例: 绘制三角网
 */

import * as Cesium from "cesium";
import * as EasyCesium from "@xhymf1992/easy-cesium";
import { tin } from "./data";

export function drawEntityCollection() {

    let options = {
        name: "triangle_collection", // 图元集名称，必填
        show: true, // 图元集是否显示，可选，默认显示
        viewer: window.viewer //
    }

    // @ts-ignore
    window.collection = new EasyCesium.EntityCollection(options);

    /**
     * 调用EntityCollection的update函数来对实体集合做自定义的处理
     * update的输入参数为一个用户自定义的回调函数
     * EntityCollection会给回调函数传入两个参数：
     *     entities 实体所属的cesium图元集
     *     entityArray 实体集合数组
     */
    // @ts-ignore
    window.collection.update((entities: Cesium.EntityCollection, entityArray: any[]) => {
        //绘制三角网
        for(let idxTri = 0; idxTri < tin.length; idxTri++) {
            let id = `tri_${idxTri}`;
            let options = {
                id: id,
                name: id,
                positions: [
                    Cesium.Cartesian3.fromDegrees(tin[idxTri][0][0], tin[idxTri][0][1], tin[idxTri][0][2] + 100),
                    Cesium.Cartesian3.fromDegrees(tin[idxTri][1][0], tin[idxTri][1][1], tin[idxTri][1][2] + 100),
                    Cesium.Cartesian3.fromDegrees(tin[idxTri][2][0], tin[idxTri][2][1], tin[idxTri][2][2] + 100)
                ],
                color: "rgba(255, 255, 0, 0.5)",
                outline: true,
                entities, // 实体所属的cesium图元集，须在此传入（如果为空，实体类内部会创建新的dataSource，这是创建单个实体时的用法）
                viewer: window.viewer
            }

            // 实体的创建与之前相同，除了多传一个entities
            let entity = new EasyCesium.PolygonEntity(options);
            entity.init();

            // 将实体push到实体集数组，后续可从该数组中找对应的实体做相应的处理
            entityArray.push(entity);
        }
    })

    // 视角飞到entity集
    // @ts-ignore
    window.collection.flyTo();

    // // entity集整体切换显隐
    // window.collection.show = false;
    // window.collection.show = true;

    // // 销毁entity集
    // window.collection.destroy();
}